<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        //函数内部是可以读取函数外部变量
        // var n = 999;
        // function fn () {
        //     console.log(n);
        // }
        // fn();

        //函数外部不能读取函数内部变量
        // function fn() {
        //     var n = 100;
        // }
        // fn();
        
        // console.log(n);


        //不用var的话，你实际上声明了一个全局变量
        // function fn () {
        //     n = 999;
        // }

        // fn();
        // console.log(n, '<--nnn');
        // console.log(window.n, '<--window.n');


        //就是在函数的内部，再定义一个函数， f2函数就是闭包
        // function f1() {
        //     var n = 999;
        //     function f2() {
        //         console.log(n);
        //     }
        //     return f2;
        // }

        // var result = f1();
        
        // result();





        //闭包会在内存中不会释放掉
        // function f1 () {
        //     var n = 999;
        //     nAdd = function  () {
        //         n = n + 1;
        //     }
        //     function f2() {
        //         console.log(n);
        //     }
        //     return f2;
        // }

        // var result = f1();
        // result();
        // nAdd();
        // result();
        // nAdd();
        // result();

    // 题1
    //     var name = "The Window";

    // 　　var object = {

    // 　　　　name : "My Object",

    // 　　　　getNameFunc : function(){

    // 　　　　　　return function(){

    // 　　　　　　　　return this.name;

    // 　　　　　　};

    // 　　　　}
    // 　　};

    // var result = object.getNameFunc();

    // console.log(result(),'这个this指向的就是window');

    // console.log(object.getNameFunc()());


    //题2
//     var name = "The Window";

// 　　var object = {
// 　　　　name : "My Object",
// 　　　　getNameFunc : function(){
// 　　　　　　var that = this;
// 　　　　　　return function(){
// 　　　　　　　　return that.name;
// 　　　　　　};
// 　　　　}
// 　　};

// console.log(object.getNameFunc()());
        
//挂在Array原型上的
// Array.prototype.qmap = function (fn) {
//     console.log(this,'<---');
//     var arr = this;
//     var temp = [];
    
//     for (var i = 0; i<arr.length; i++) {
//         temp.push(fn(i,arr[i]));
//     }
//     return temp
// }

// var arr = [1,2,3];

// var result = arr.qmap(function (k,v) {
//     console.log(k,v);
//     return v + 1;
// });

// console.log(result, '<---result 是undefined');


// $('.xxx').on("click", function () {

// })


// String.prototype.trim = function () {
    
// }

//没有挂在原型上的

function qmap(arr,fn) {
    var temp = [];
    for (var i = 0; i<arr.length; i++) {
        temp.push(fn(i,arr[i]));
    }
    return temp;
}

var arr = [1,2,3];
var result = qmap(arr,function (k,v) {
    console.log(k,v, '<---k,v');
    // return v+2;
})

console.log(result);
    </script>
</body>
</html>

